package com.zjsru.oneDay;

/**
 * 1432. 改变一个整数能得到的最大差值
 *
 * @Author: cookLee
 * @Date: 2025-06-15
 */
public class MaxDiff {

    /**
     * 主
     * \
     * 选择一个数字 x (0 <= x <= 9).
     * 选择另一个数字 y (0 <= y <= 9) 。数字 y 可以等于 x 。
     * \
     * 输入：num = 555
     * 输出：888
     * 解释：第一次选择 x = 5 且 y = 9 ，并把得到的新数字保存在 a 中。
     * 第二次选择 x = 5 且 y = 1 ，并把得到的新数字保存在 b 中。
     * 现在，我们有 a = 999 和 b = 111 ，最大差值为 888
     * \
     * 输入：num = 9
     * 输出：8
     * 解释：第一次选择 x = 9 且 y = 9 ，并把得到的新数字保存在 a 中。
     * 第二次选择 x = 9 且 y = 1 ，并把得到的新数字保存在 b 中。
     * 现在，我们有 a = 9 和 b = 1 ，最大差值为 8
     * \
     *
     * @param args args
     */
    public static void main(String[] args) {
        MaxDiff maxDiff = new MaxDiff();
        System.out.println(maxDiff.maxDiff(123456));
    }

    public int maxDiff(int num) {
        String str = String.valueOf(num);
        int mark = 0;
        while (mark < str.length() && str.charAt(mark) == '9') {
            mark++;
        }
        //最大数
        String temp = str;
        if (mark < str.length()) {
            temp = str.replace(str.charAt(mark), '9');
        }
        //最小数
        String minStr = str;
        // 将最高位替换成 1
        // 或者找到一个与最高位不相等的高位替换成 0
        for (int i = 0; i < minStr.length(); i++) {
            char digit = minStr.charAt(i);
            //如果处于第一位
            if (i == 0) {
                if (digit != '1') {
                    minStr = minStr.replace(digit, '1');
                    break;
                }
            } else {
                //后续位且不等于第一位的数字，保证非0
                if (digit != '0' && digit != minStr.charAt(0)) {
                    minStr = minStr.replace(digit, '0');
                    break;
                }
            }
        }
        return Integer.parseInt(temp) - Integer.parseInt(minStr);
    }

}
